build:
    maxIssues: 100500 # Это нужно, чтобы не упасть сразу после прогона detekt-а, а дождаться остальных утилит.
    excludeCorrectable: false
    weights:
    # complexity: 2
    # LongParameterList: 1
    # style: 1
    # comments: 1

config:
    validation: true
    warningsAsErrors: false
    # when writing own rules with new properties, exclude the property path e.g.: 'my_rule_set,.*>.*>[my_property]'
    excludes: ''

processors:
    active: true
    exclude:
        - 'DetektProgressListener'
    # - 'KtFileCountProcessor'
    # - 'PackageCountProcessor'
    # - 'ClassCountProcessor'
    # - 'FunctionCountProcessor'
    # - 'PropertyCountProcessor'
    # - 'ProjectComplexityProcessor'
    # - 'ProjectCognitiveComplexityProcessor'
    # - 'ProjectLLOCProcessor'
    # - 'ProjectCLOCProcessor'
    # - 'ProjectLOCProcessor'
    # - 'ProjectSLOCProcessor'
    # - 'LicenseHeaderLoaderExtension'

console-reports:
    active: true
    exclude: [ ]

output-reports:
    active: true
    exclude: [ ]

# Правила для регулирования документации и лицензирования.
comments:
    active: false
    excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ]
    AbsentOrWrongFileLicense:
        active: false
        licenseTemplateFile: 'license.template'
        licenseTemplateIsRegex: false
    CommentOverPrivateFunction:
        active: false
    CommentOverPrivateProperty:
        active: false
    EndOfSentenceFormat:
        active: false
        endOfSentenceFormat: '([.?!][ \t\n\r\f<])|([.?!:]$)'
    UndocumentedPublicClass:
        active: false
        searchInNestedClass: false
        searchInInnerClass: false
        searchInInnerObject: false
        searchInInnerInterface: false
    UndocumentedPublicFunction:
        active: false
    UndocumentedPublicProperty:
        active: false

# Правила для регулирования сложности кода.
complexity:
    active: true
    ComplexCondition:
        active: true
        threshold: 4
    # Правило выключено, потому что дублируется правилом complexity:TooManyFunctions.
    ComplexInterface:
        active: false
        threshold: 10
        includeStaticDeclarations: false
        includePrivateDeclarations: false
    CognitiveComplexMethod:
        active: true
        threshold: 15
    CyclomaticComplexMethod:
        active: true
        threshold: 10
        ignoreSingleWhenExpression: true
        ignoreSimpleWhenEntries: true
        ignoreNestingFunctions: false
        nestingFunctions: [ run, let, apply, with, also, use, forEach, isNotNull, ifNull ]
    LabeledExpression:
        active: true
        ignoredLabels: [ ]
    LargeClass:
        active: true
        threshold: 200
    LongMethod:
        active: true
        threshold: 40
        excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ]
        ignoreAnnotated: [ "Composable" ]
    LongParameterList:
        active: true
        functionThreshold: 6
        constructorThreshold: 7
        ignoreDefaultParameters: true
        ignoreDataClasses: true
        ignoreAnnotated: [ "Inject", "InjectConstructor", "Composable" ]
    MethodOverloading:
        active: true
        threshold: 6
    NamedArguments:
        active: true
        threshold: 3
    NestedBlockDepth:
        active: true
        threshold: 4
    ReplaceSafeCallChainWithRun:
        active: false
    StringLiteralDuplication:
        active: true
        threshold: 3
        ignoreAnnotation: true
        excludeStringsWithLessThan5Characters: true
        ignoreStringsRegex: '$^'
        excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**', '**/*.kts' ]
    TooManyFunctions:
        active: true
        thresholdInFiles: 51
        thresholdInClasses: 51
        thresholdInInterfaces: 11
        thresholdInObjects: 51
        thresholdInEnums: 6
        ignoreDeprecated: true
        ignorePrivate: true
        ignoreOverridden: false
        excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ]

# Правила для регулирования работы с корутинами.
coroutines:
    active: true
    GlobalCoroutineUsage:
        active: true
    RedundantSuspendModifier:
        active: true
    SleepInsteadOfDelay:
        active: true
    SuspendFunWithFlowReturnType:
        active: true

# Правила для регулирования пустых блоков кода.
empty-blocks:
    active: true
    EmptyCatchBlock:
        active: true
        allowedExceptionNameRegex: '_|(ignore|expected|ignored).*'
    EmptyClassBlock:
        active: true
    EmptyDefaultConstructor:
        active: true
    EmptyDoWhileBlock:
        active: true
    EmptyElseBlock:
        active: true
    EmptyFinallyBlock:
        active: true
    EmptyForBlock:
        active: true
    EmptyFunctionBlock:
        active: true
        ignoreOverridden: false
    EmptyIfBlock:
        active: true
    EmptyInitBlock:
        active: true
    EmptyKtFile:
        active: true
    EmptySecondaryConstructor:
        active: true
    EmptyTryBlock:
        active: true
    EmptyWhenBlock:
        active: true
    EmptyWhileBlock:
        active: true

# Правила для регулирования работы с исключениями.
exceptions:
    active: true
    ExceptionRaisedInUnexpectedLocation:
        active: true
        methodNames: [ toString, hashCode, equals, finalize ]
    InstanceOfCheckForException:
        active: true
        excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ]
    # Выключено, потому что иногда бывает необходимость оставить тудушки в качестве реализации
    NotImplementedDeclaration:
        active: false
    ObjectExtendsThrowable:
        active: true
    PrintStackTrace:
        active: true
    # Выключено, потому что мы иногда бросаем исключения из catch-блоков, чтобы их отловить позже
    RethrowCaughtException:
        active: false
    ReturnFromFinally:
        active: true
        ignoreLabeled: false
    SwallowedException:
        active: true
        ignoredExceptionTypes:
            - InterruptedException
            - NumberFormatException
            - ParseException
            - MalformedURLException
        allowedExceptionNameRegex: '_|(ignore|expected|ignored).*'
    ThrowingExceptionFromFinally:
        active: true
    ThrowingExceptionInMain:
        active: false
    ThrowingExceptionsWithoutMessageOrCause:
        active: true
        exceptions:
            - IllegalArgumentException
            - IllegalStateException
            - IOException
        excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ]
    ThrowingNewInstanceOfSameException:
        active: true
    TooGenericExceptionCaught:
        active: true
        exceptionNames:
            - ArrayIndexOutOfBoundsException
            - Error
            - Exception
            - IllegalMonitorStateException
            - NullPointerException
            - IndexOutOfBoundsException
            - RuntimeException
            - Throwable
        allowedExceptionNameRegex: '_|(ignore|expected|ignored).*'
        excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ]
    TooGenericExceptionThrown:
        active: true
        exceptionNames:
            - Error
            - Exception
            - Throwable
            - RuntimeException

# Правила форматирования кодовой базы.
formatting:
    active: true
    android: false
    autoCorrect: true
    AnnotationOnSeparateLine:
        active: true
        autoCorrect: true
    AnnotationSpacing:
        active: true
        autoCorrect: true
    ArgumentListWrapping:
        active: true
        autoCorrect: true
        indentSize: 4
        maxLineLength: 120
    ChainWrapping:
        active: false
        autoCorrect: false
    CommentSpacing:
        active: true
        autoCorrect: true
    EnumEntryNameCase:
        active: true
        autoCorrect: true
    Filename:
        active: true
    FinalNewline:
        active: false
        autoCorrect: true
        insertFinalNewLine: true
    ImportOrdering:
        active: true
        autoCorrect: true
        layout: '*,java.**,javax.**,kotlin.**,kotlinx.android.synthetic.**,^'
    Indentation:
        active: true
        autoCorrect: true
        indentSize: 4
        #continuationIndentSize: 4
    # Правило выключено, потому что дублируется правилом style:MaxLineLength
    MaximumLineLength:
        active: false
        maxLineLength: 120
        ignoreBackTickedIdentifier: false
    ModifierOrdering:
        active: true
        autoCorrect: true
    MultiLineIfElse:
        active: true
        autoCorrect: true
    # Правило выключено, потому что удобно оставлять пустую строчку
    # перед закрывающей скобкой класса
    NoBlankLineBeforeRbrace:
        active: false
        autoCorrect: false
    NoConsecutiveBlankLines:
        active: true
        autoCorrect: true
    NoEmptyClassBody:
        active: true
        autoCorrect: true
    NoEmptyFirstLineInMethodBlock:
        active: true
        autoCorrect: true
    NoLineBreakAfterElse:
        active: true
        autoCorrect: true
    NoLineBreakBeforeAssignment:
        active: true
        autoCorrect: true
    NoMultipleSpaces:
        active: true
        autoCorrect: true
    NoSemicolons:
        active: true
        autoCorrect: true
    NoTrailingSpaces:
        active: true
        autoCorrect: true
    NoUnitReturn:
        active: true
        autoCorrect: true
    NoUnusedImports:
        active: true
        autoCorrect: true
    # Правило выключено, потому что оно дублируется правилом WildcardImport, которое лучше настраивается.
    NoWildcardImports:
        active: false
    # Правило выключено, потому что мы разрешаем использовать '_' в имени пакета
    # Правило дублируется правилом naming:PackageNaming
    PackageName:
        active: false
        autoCorrect: false
    ParameterListWrapping:
        active: true
        autoCorrect: true
        indentSize: 4
        maxLineLength: 120
    SpacingAroundAngleBrackets:
        active: true
        autoCorrect: true
    SpacingAroundColon:
        active: true
        autoCorrect: true
    SpacingAroundComma:
        active: true
        autoCorrect: true
    SpacingAroundCurly:
        active: true
        autoCorrect: true
    SpacingAroundDot:
        active: true
        autoCorrect: true
    SpacingAroundDoubleColon:
        active: true
        autoCorrect: true
    SpacingAroundKeyword:
        active: true
        autoCorrect: true
    SpacingAroundOperators:
        active: true
        autoCorrect: true
    SpacingAroundParens:
        active: true
        autoCorrect: true
    SpacingAroundRangeOperator:
        active: true
        autoCorrect: true
    SpacingAroundUnaryOperator:
        active: true
        autoCorrect: true
    # Правило выключено, потому что оно дублируется
    # правилом AnnotationOnSeparateLine
    SpacingBetweenDeclarationsWithAnnotations:
        active: false
        autoCorrect: false
    SpacingBetweenDeclarationsWithComments:
        active: true
        autoCorrect: true
        excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ]
    StringTemplate:
        active: true
        autoCorrect: true

# Правила именования переменных / функций / классов и т.п.
naming:
    active: true
    ClassNaming:
        active: true
        classPattern: '([A-Z$][a-zA-Z0-9$]*|[_A-Z]*(_SCREEN)*)'
        excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ]
    ConstructorParameterNaming:
        active: true
        parameterPattern: '[a-z][A-Za-z0-9]*'
        privateParameterPattern: '[a-z][A-Za-z0-9]*'
        excludeClassPattern: '$^'
        excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ]
    EnumNaming:
        active: true
        enumEntryPattern: '^[A-Z][_a-zA-Z0-9]*'
        excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ]
    # Правило выключено, потому что мы не ограничиваем фантазию разработчиков
    # в вопросе именования классов
    ForbiddenClassName:
        active: false
        forbiddenName: [ ]
        excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ]
    # Правило выключено, потому что иногда возникает необходимость в длинном имени
    FunctionMaxLength:
        active: false
        maximumFunctionNameLength: 30
        excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ]
    # Правило выключено, потому что бывают функции, которые в определённом
    # контексте имеют право называться коротким именем (в 1 символ)
    FunctionMinLength:
        active: false
        minimumFunctionNameLength: 3
        excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ]
    FunctionNaming:
        active: true
        functionPattern: '([a-z][a-zA-Z0-9]*)|(`.*`)'
        excludeClassPattern: '$^'
        ignoreAnnotated: [ 'Composable' ]
        excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ]
    FunctionParameterNaming:
        active: true
        parameterPattern: '[a-z][A-Za-z0-9]*'
        excludeClassPattern: '$^'
        excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ]
    InvalidPackageDeclaration:
        active: true
        excludes: [ '**/*.kts' ]
        rootPackage: ''
    MatchingDeclarationName:
        active: true
        mustBeFirst: true
    MemberNameEqualsClassName:
        active: true
        ignoreOverridden: true
    NoNameShadowing:
        active: true
    NonBooleanPropertyPrefixedWithIs:
        active: true
        excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ]
    ObjectPropertyNaming:
        active: true
        constantPattern: '[A-Za-z][_A-Za-z0-9]*'
        propertyPattern: '[A-Za-z][_A-Za-z0-9]*'
        privatePropertyPattern: '(_)?[A-Za-z][_A-Za-z0-9]*'
        excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ]
    PackageNaming:
        active: true
        packagePattern: '^[a-z]+(\.[a-z][a-z0-9]*)*$'
        excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ]
    TopLevelPropertyNaming:
        active: true
        constantPattern: '[A-Z][_A-Za-z0-9]*'
        propertyPattern: '[A-Za-z][_A-Za-z0-9]*'
        privatePropertyPattern: '_?[A-Za-z][_A-Za-z0-9]*'
        excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ]

        # Правило выключено, потому что иногда возникает необходимость в длинном
        # имени переменной
    VariableMaxLength:
        active: false
        maximumVariableNameLength: 64
        excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ]

        # Правило выключено, потому что иногда возникает необходимость в коротком
        # имени переменной
    VariableMinLength:
        active: false
        minimumVariableNameLength: 1
        excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ]
    VariableNaming:
        active: true
        variablePattern: '[a-z][A-Za-z0-9]*'
        privateVariablePattern: '(_)?[a-z][A-Za-z0-9]*'
        excludeClassPattern: '$^'
        excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ]

# Набор правил для анализа кода на проблемы с производительностью.
performance:
    active: true
    ArrayPrimitive:
        active: true
    ForEachOnRange:
        active: true
        excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ]
    SpreadOperator:
        active: false
        excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ]
    UnnecessaryTemporaryInstantiation:
        active: true

# Набор правил для анализа кода на потенциальные баги.
potential-bugs:
    active: true
    CastToNullableType:
        active: true
    Deprecation:
        active: true
    DontDowncastCollectionTypes:
        active: true
    EqualsAlwaysReturnsTrueOrFalse:
        active: true
    EqualsWithHashCodeExist:
        active: true
    ExitOutsideMain:
        active: true
    ExplicitGarbageCollectionCall:
        active: true
    HasPlatformType:
        active: true
    IgnoredReturnValue:
        active: true
        restrictToConfig: true
        returnValueAnnotations: [ '*.CheckReturnValue', '*.CheckResult' ]
    ImplicitDefaultLocale:
        active: true
    ImplicitUnitReturnType:
        active: true
        allowExplicitReturnType: false
    InvalidRange:
        active: true
    IteratorHasNextCallsNextMethod:
        active: true
    IteratorNotThrowingNoSuchElementException:
        active: true
    LateinitUsage:
        active: true
        ignoreAnnotated: [ 'Inject' ]
        ignoreOnClassesPattern: ''
        excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ]
    MapGetWithNotNullAssertionOperator:
        active: true
    NullableToStringCall:
        active: true
    UnconditionalJumpStatementInLoop:
        active: true
    UnnecessaryNotNullOperator:
        active: true
    UnnecessarySafeCall:
        active: true
    UnreachableCatchBlock:
        active: true
    UnreachableCode:
        active: true
    UnsafeCallOnNullableType:
        active: true
    UnsafeCast:
        active: true
    UnusedUnaryOperator:
        active: true
    UselessPostfixExpression:
        active: true
    WrongEqualsTypeParameter:
        active: true

# Набор правил, регулирующий применение определённого код-стайла.
style:
    active: true
    # Выключено, потому что мы нигде не соблюдаем порядок модификаторов
    # видимости, указанный в "kotlin convention"
    ClassOrdering:
        active: false
    CollapsibleIfStatements:
        active: true
    DataClassContainsFunctions:
        active: true
        conversionFunctionPrefix: [ ]
    DataClassShouldBeImmutable:
        active: true
    DestructuringDeclarationWithTooManyEntries:
        active: true
        maxDestructuringEntries: 3
    EqualsNullCall:
        active: true
    EqualsOnSignatureLine:
        active: true
    ExplicitCollectionElementAccessMethod:
        active: true
    ExplicitItLambdaParameter:
        active: true
    # Выключено, потому что мы разрешаем писать функции из 1 выражения
    # в виде block statement
    ExpressionBodySyntax:
        active: false
        includeLineWrapping: false
    ForbiddenComment:
        active: true
        comments: [ 'TODO', 'FIXME', 'STOPSHIP' ]
        allowedPatterns: 'PORTFOLIO-[0-9]+|MOB-[0-9]+|HH-[0-9]+'
    # Выключено, потому что не возникало необходимости запрещать import-ы
    # конкретных сущностей
    ForbiddenImport:
        active: false
        imports: [ ]
        forbiddenPatterns: ''
    ForbiddenMethodCall:
        active: true
        methods: [ {
            value: 'kotlin.io.println'
        }, {
            value: 'kotlin.io.print'
        } ]
    ForbiddenVoid:
        active: true
        ignoreOverridden: false
        ignoreUsageInGenerics: false
    FunctionOnlyReturningConstant:
        active: true
        ignoreOverridableFunction: true
        ignoreActualFunction: true
        excludedFunctions: [ 'describeContents' ]
        ignoreAnnotated: [ 'dagger.Provides' ]
    LoopWithTooManyJumpStatements:
        active: true
        maxJumpCount: 1
    MagicNumber:
        active: true
        ignoreNumbers: [ '-1', '0', '1', '2' ]
        ignoreHashCodeFunction: true
        ignorePropertyDeclaration: false
        ignoreLocalVariableDeclaration: false
        ignoreConstantDeclaration: true
        ignoreCompanionObjectPropertyDeclaration: true
        ignoreAnnotation: false
        ignoreNamedArgument: true
        ignoreEnums: false
        ignoreRanges: false
        ignoreExtensionFunctions: true
        excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ]
    BracesOnIfStatements:
        active: true
        singleLine: 'never'
        multiLine: 'always'
    MandatoryBracesLoops:
        active: true
    MaxLineLength:
        active: true
        maxLineLength: 120
        excludePackageStatements: true
        excludeImportStatements: true
        excludeCommentStatements: true
    MayBeConst:
        active: true
    ModifierOrder:
        active: true
    MultilineLambdaItParameter:
        active: true
    NestedClassesVisibility:
        active: true
    # Выключено, потому что дублируется правилом formatting:FinalNewLine
    # + в другом правиле есть автоисправление
    NewLineAtEndOfFile:
        active: false
    NoTabs:
        active: true
    OptionalAbstractKeyword:
        active: true
    OptionalUnit:
        active: false
    # Выключено, потому что по нашему код-стайлу даже в единичных выражениях
    # внутри when мы иногда ставим фигурные скобки
    BracesOnWhenStatements:
        active: false
    # Выключено, потому что мы обычно используем явные конструкторы Pair-а, где
    # нужно, а где можно - используем оператор to.
    PreferToOverPairSyntax:
        active: false
    ProtectedMemberInFinalClass:
        active: true
    RedundantExplicitType:
        active: true
    RedundantHigherOrderMapUsage:
        active: true
    RedundantVisibilityModifierRule:
        active: true
    ReturnCount:
        active: true
        max: 2
        excludedFunctions: [ 'equals' ]
        excludeLabeled: false
        excludeReturnFromLambda: true
        excludeGuardClauses: false
    SafeCast:
        active: true
    SerialVersionUIDInSerializableClass:
        active: true
    SpacingBetweenPackageAndImports:
        active: true
    ThrowsCount:
        active: true
        max: 2
    # Правило выключено, потому что дублируется правилом formatting:NoTrailingSpaces, у которого есть автофикс
    TrailingWhitespace:
        active: false
    UnderscoresInNumericLiterals:
        active: true
        acceptableLength: 5
        excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ]
    UnnecessaryAbstractClass:
        active: true
        ignoreAnnotated: [ 'dagger.Module' ]
    UnnecessaryAnnotationUseSiteTarget:
        active: true
    UnnecessaryApply:
        active: true
    UnnecessaryFilter:
        active: true
    UnnecessaryInheritance:
        active: true
    UnnecessaryLet:
        active: true
    UnnecessaryParentheses:
        active: true
    UntilInsteadOfRangeTo:
        active: true
    # Правило выключено, потому что дублируется правилом formatting:NoUnusedImports
    UnusedImports:
        active: false
    UnusedPrivateClass:
        active: true
    UnusedPrivateMember:
        active: true
        allowedNames: '(_|ignored|expected|serialVersionUID|commonMain|commonTest|androidMain|androidTest|iosMain|iosTest)'
        ignoreAnnotated: [ 'Preview', 'LightDarkPreviews' ]
    UseArrayLiteralsInAnnotations:
        active: true
    UseCheckNotNull:
        active: true
    UseCheckOrError:
        active: true
    # Выключено, потому что data-классы не всегда нужно использовать, если
    # класс хранит в себе только данные.
    UseDataClass:
        active: false
        ignoreAnnotated: [ ]
        allowVars: false
    UseEmptyCounterpart:
        active: true
    UseIfEmptyOrIfBlank:
        active: true
    # Выключено, потому что иногда выражение when с 2 ветками понятнее, чем if
    UseIfInsteadOfWhen:
        active: false
    UseIsNullOrEmpty:
        active: true
    UseOrEmpty:
        active: true
    UseRequire:
        active: true
    UseRequireNotNull:
        active: true
    UselessCallOnNotNull:
        active: true
    UtilityClassWithPublicConstructor:
        active: true
    VarCouldBeVal:
        active: true
    WildcardImport:
        active: true
        excludeImports: [ 'java.util.*', 'kotlinx.android.synthetic.*' ]
        excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ]

libraries:
    # Выключено, потому что наши core-модули могут выставлять наружу data class-ы
    ForbiddenPublicDataClass:
        active: false
        excludes: [ '**' ]
        ignorePackages: [ '*.internal', '*.internal.*' ]
    LibraryCodeMustSpecifyReturnType:
        active: true
        excludes: [ '**' ]
    # Выключено, потому что наши core-модули могут выставлять наружу свои классы,
    # не закрытые интерфейсами
    LibraryEntitiesShouldNotBePublic:
        active: false
        excludes: [ '**' ]
